package cn.gzsf.springboot01.controller;

import cn.gzsf.springboot01.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@Controller//加此注解，标识该类为控制类，同时由Spring框架管理类(创建对象，管理对象等)
public class HelloController {

    //此方法用于处理/hello请求，相当于一个Servlet，
    // 如需要用到请求和响应对象，只需要在方法参数上进行声明即可
    @RequestMapping("/hello")
    public void hello(HttpServletResponse response) throws IOException {
        System.out.println("服务器收到了请求");
        //设置响应类型以及字符集
        response.setContentType("text/html;charset=utf-8");
        //获取输出对象
        PrintWriter out = response.getWriter();
        out.println("<b>哪吒 and 敖丙</b>");
    }

    @RequestMapping("/hi")//此注解的参数和前端请求路径一致，标识本方法处理/hi请求
    @ResponseBody//此注解将方法的返回值以字符串的形式响应给客户端
    public String hi(HttpServletRequest request){
        String info = request.getParameter("info");
        System.out.println(info);
        return "你好，我是加粗标签<b>"+info+"</b>";
    }

    @RequestMapping("/sayHi")
    @ResponseBody       //在方法参数上声明和接收客户端属性名一致的参数名
    public String sayHi(String info){
        System.out.println(info);
        return "你好，我是加粗标签<b>"+info+"</b>";
    }

    @RequestMapping("/reg")
    @ResponseBody     //当客户端参数很多且参数有关联关系，可以创建一个实体类，类中属性名和参数名一致
                      //在Controller处理该请求的方法上声明该类的对象即可接收所有参数，封装在对象的属性中
    public String reg(User user){
        //soutp
        System.out.println("user = " + user);
        return user.toString();
    }
}
